package cn.itcast.nems.studentrecord.dto;

import cn.itcast.nems.common.QueryParam;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * <p>
 * ·缴费情况 DTO
 * </p>
 *
 * @author zhouwei
 * @since 2023/11/2 10:21 AM
 **/
@Data
public class ClazzEnrollmentCountDTO implements QueryParam,Serializable {
    /**
     * 缴费情况ID
     */
    private String id ;
    /**
     * EMS 班级ID
     */
    private Integer clazzId ;
    /**
     * 班级名称 ·
     */
    private String clazzName  ;
    /**
     * 开班时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @JsonSerialize(using = LocalDateSerializer.class)
    @JsonDeserialize(using = LocalDateDeserializer.class)
    private LocalDate startDate ;
    /**
     * 校区ID
     */
    private String schoolId ;
    private List<String> schoolIds ;
    /**
     * 校区名称
     */
    private String schoolName ;
    /**
     * 学科ID
     */
    private String subjectId ;
    private List<String> subjectIds ;
    /**
     * 学科名称
     */
    private String subjectName  ;
    /**
     * 报名总人数
     */
    private Integer totalNumber;
    /**
     * 完成缴费总人数
     */
    private Integer paidNumber;
    /**
     * 部分缴费总人数
     */
    private Integer payingNumber;
    /**
     * 未缴费总人数
     */
    private Integer pendingNumber ;

    /**
     * 欠费金额合计
     */
    private BigDecimal balanceAmountDue ;
    /**
     * 状态;枚举值：0｜未完成缴费、1｜已完成缴费。当完成缴费总人数=报名总人数时，状态为1。持续报名后“报名人数>完成缴费总人数”时状态改为0；
     */
    private Integer state ;
    /**
     * 开班时间 范围
     */
    private String openClazzStartDate ;
    private String openClazzEndDate ;
    /**
     * 班级类型ID
     */
    private String clazzTypeId;
    /**
     * 班级类型名称
     */
    private String clazzTypeName;
    /**
     * 是否可升级 ，0- 就业班、1-基础班
     */
    private Boolean upgradeable ;
}
